package top.v5it.japi.plus.core.spring.web.interceptor;

import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;

/**
 * 简单的查找缓存
 *
 * @author zhanpu
 * @date 20-12-30
 */
final class JapiEadaCache {

    /**
     * 初始化128缓存容量
     */
    private static final ConcurrentMap<String, Object> JAPI_MAP = new ConcurrentHashMap<>(128);

    private JapiEadaCache() {
    }

    /**
     * 获取实例对象
     *
     * @return
     */
    static JapiEadaCache getInstance() {
        return Instance.INSTANCE;
    }

    /**
     * 添加key
     *
     * @param key
     */
    void put(String key) {
        JAPI_MAP.put(key, Boolean.TRUE);
    }

    /**
     * 添加key，如果缓存中存在则不处理
     *
     * @param key
     */
    void putIfAbsent(String key) {
        JAPI_MAP.putIfAbsent(key, Boolean.TRUE);
    }

    /**
     * 查找key
     *
     * @param key
     * @return
     */
    boolean containsKey(String key) {
        return JAPI_MAP.containsKey(key);
    }

    /**
     * 添加key
     *
     * @param key
     * @param value
     */
    void put(String key, Object value) {
        JAPI_MAP.put(key, value);
    }

    /**
     * 添加key，如果缓存中存在则不处理
     *
     * @param key
     * @param value
     */
    void putIfAbsent(String key, Object value) {
        JAPI_MAP.putIfAbsent(key, value);
    }

    /**
     * 获取缓存数据
     *
     * @param key
     * @return
     */
    Optional get(String key) {
        return Optional.ofNullable(JAPI_MAP.get(key));
    }

    private static final class Instance {
        private static final JapiEadaCache INSTANCE = new JapiEadaCache();
    }

}
